package com.zlm.app.partner.service;

import com.zlm.common.dto.HxGroupDto;
import com.zlm.common.dto.JsonResultDto;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;

/**
 * 调用zlm-user-partner内部服务
 * @Author: duyufu
 * @Date: 2019/7/10 9:48
 */
@FeignClient(value = "zlm-user-partner",fallback = UserPartnerFallback.class)
@Service
public interface UserPartnerService {

    /**
     * 发送验证码
     * @param mobile
     * @return
     */
    @GetMapping("/activation/sendActivation")
    JsonResultDto sendActivation(@RequestParam("mobile") String mobile);

    /**
     * 校验验证码
     * @param activationCode
     * @param mobile
     * @return
     */
    @GetMapping("/activation/checkActivation")
    JsonResultDto checkActivation(@RequestParam("activationCode") String activationCode, @RequestParam("mobile") String mobile);

    /**
     * 获取登录用户
     * @param token
     * @return
     */
    @GetMapping("/token/getLoginPartner")
    JsonResultDto getLoginPartner(@RequestParam("token") String token);

    /**
     * 是否存在合伙人
     * @param mobile
     * @return
     */
    @GetMapping("/part/isExistPart")
    JsonResultDto isExistPart(@RequestParam("mobile") String mobile);


    /**
     * 登录合伙人
     * @param mobile
     * @return
     */
    @GetMapping("/loginPartner/loginPartner")
    JsonResultDto loginPartner(@RequestParam("mobile") String mobile);

    /**
     * 验证码登录
     * @param mobile
     * @return
     */
    @GetMapping("/loginPartner/activationLogin")
    JsonResultDto activationLogin(@RequestParam("mobile") String mobile);

    /**
     * 根据手机号和密码获取合伙人信息
     * @param mobile
     * @param password
     * @return
     */
    @GetMapping("/part/queryPartByMobileAndPassword")
    JsonResultDto queryPartByMobileAndPassword(@RequestParam("mobile") String mobile, @RequestParam("password") String password);

    /**
     * 修改密码
     * @param mobile
     * @param password
     * @return
     */
    @GetMapping("/part/updatePassword")
    JsonResultDto updatePassword(@RequestParam("mobile") String mobile, @RequestParam("password") String password);

    /**
     * 根据token修改密码
     * @param partId
     * @param oldPassword
     * @param newPassword
     * @return
     */
    @GetMapping("/part/updatePasswordByToken")
    JsonResultDto updatePasswordByToken(@RequestParam("partId") Integer partId,
                                        @RequestParam("oldPassword") String oldPassword,@RequestParam("newPassword") String newPassword);

    /**
     * 设置密码
     * @param partId
     * @param password
     * @return
     */
    @GetMapping("/part/setPassword")
    JsonResultDto setPassword(@RequestParam("partId") Integer partId,@RequestParam("password") String password);

    /**
     * 修改手机号
     * @param partId
     * @param mobile
     * @return
     */
    @GetMapping("/part/changePhone")
    JsonResultDto changePhone(@RequestParam("partId") Integer partId, @RequestParam("mobile") String mobile);

    /**
     * 添加好友
     * @param userId
     * @param friendHxId
     * @return
     */
    @GetMapping("/part/addFriend")
    JsonResultDto addFriend(@RequestParam("userId") Integer userId,
                            @RequestParam("friendHxId") String friendHxId);

    /**
     * 删除好友
     * @param userId
     * @param friendHxId
     * @return
     */
    @GetMapping("/part/deleteFriend")
    JsonResultDto deleteFriend(@RequestParam("userId") Integer userId,
                               @RequestParam("friendHxId") String friendHxId);

    /**
     * 查询单个用户
     * @param userHxId
     * @return
     */
    @GetMapping("/part/queryHxUser")
    JsonResultDto queryHxUser(@RequestParam("userHxId") String userHxId);

    /**
     * 获取好友列表
     * @param userId
     * @return
     */
    @GetMapping("/part/queryFriendList")
    JsonResultDto queryFriendList(@RequestParam("userId") Integer userId);

    /**
     * 搜索好友
     * @param keyword
     * @return
     */
    @GetMapping("/part/searchFriend")
    JsonResultDto searchFriend(@RequestParam("keyword") String keyword);

    /**
     * 环信注册
     * @param userId
     * @return
     */
    @GetMapping("/loginPartner/huanxinRegister")
    JsonResultDto huanxinRegister(@RequestParam("userId") Integer userId);

    /**
     * 环信强制下线
     * @param userHxId
     */
    @GetMapping("/loginPartner/huanxinDisconnect")
    void huanxinDisconnect(@RequestParam("userHxId") String userHxId);

    /**
     * 创建群组
     * @param group
     * @return
     */
    @PostMapping("/group/createGroup")
    JsonResultDto createGroup(HxGroupDto group);

    /**
     * 批量添加群组成员
     * @param group
     * @return
     */
    @PostMapping("/group/addHxGroupMember")
    JsonResultDto addHxGroupMember(HxGroupDto group);

    /**
     * 批量删除群组成员
     * @param group
     * @return
     */
    @PostMapping("/group/deleteHxGroupMember")
    JsonResultDto deleteHxGroupMember(HxGroupDto group);

    /**
     * 获取一个用户参与的所有群组
     * @param userId
     * @return
     */
    @GetMapping("/group/getAllJoinedGroup")
    JsonResultDto getAllJoinedGroup(@RequestParam("userId") Integer userId);

    /**
     * 获取群组详情
     * @param groupHxId
     * @return
     */
    @GetMapping("/group/getGroupDetail")
    JsonResultDto getGroupDetail(@RequestParam("groupHxId") String groupHxId);

    /**
     * 解散群组
     * @param userId
     * @param groupHxId
     * @return
     */
    @GetMapping("/group/deleteHxGroup")
    JsonResultDto deleteHxGroup(@RequestParam("userId") Integer userId,
                                @RequestParam("groupHxId") String groupHxId);

    /**
     * 删除单个群组成员
     * @param groupHxId
     * @param userHxId
     * @return
     */
    @GetMapping("/group/deleteSingleHxGroupMember")
    JsonResultDto deleteSingleHxGroupMember(@RequestParam("groupHxId") String groupHxId,
                                            @RequestParam("userHxId") String userHxId);

    /**
     * 分页获取群成员
     * @param groupHxId
     * @param pagenum
     * @param pagesize
     * @return
     */
    @GetMapping("/group/getHxGroupMember")
    JsonResultDto getHxGroupMember(@RequestParam("groupHxId") String groupHxId,
                                   @RequestParam("pagenum") Integer pagenum,
                                   @RequestParam("pagesize") Integer pagesize);

    /**
     * 更新群组信息
     * @param userId
     * @param groupHxId
     * @param groupname
     * @param description
     * @param maxusers
     * @return
     */
    @GetMapping("/group/updateHxGroup")
    JsonResultDto updateHxGroup(@RequestParam("userId") Integer userId,
                                @RequestParam("groupHxId") String groupHxId,
                                @RequestParam("groupname") String groupname,
                                @RequestParam("description") String description,
                                @RequestParam("maxusers") Integer maxusers);

    /**
     * 添加环信管理员
     * @param userId
     * @param groupHxId
     * @param userHxId
     * @return
     */
    @GetMapping("/group/addHxGroupAdmin")
    JsonResultDto addHxGroupAdmin(@RequestParam("userId") Integer userId,
                                  @RequestParam("groupHxId") String groupHxId,
                                  @RequestParam("userHxId") String userHxId);

    /**
     * 移除环信管理员
     * @param userId
     * @param groupHxId
     * @param userHxId
     * @return
     */
    @GetMapping("/group/deleteHxGroupAdmin")
    JsonResultDto deleteHxGroupAdmin(@RequestParam("userId") Integer userId,
                                     @RequestParam("groupHxId") String groupHxId,
                                     @RequestParam("userHxId") String userHxId);

    /**
     * 转让群组
     * @param userId
     * @param groupHxId
     * @param userHxId
     * @return
     */
    @GetMapping("/group/transferHxGroup")
    JsonResultDto transferHxGroup(@RequestParam("userId") Integer userId,
                                  @RequestParam("groupHxId") String groupHxId,
                                  @RequestParam("userHxId") String userHxId);

    /**
     * 获取管理员列表
     * @param groupHxId
     * @return
     */
    @GetMapping("/group/getHxGroupAdmin")
    JsonResultDto getHxGroupAdmin(@RequestParam("groupHxId") String groupHxId);
}
